home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / touch.c < prev    next >
C/C++ Source or Header  |  1990-07-19  |  1KB  |  82 lines

  1. /* touch - force file creation time to the present time */
  2.  
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <errno.h>
  6. int no_creat = 0;
  7.  
  8. main(argc, argv)
  9. int argc;
  10. char *argv[];
  11. {
  12.   char *path;
  13.   int i = 1;
  14.  
  15.   if (argc == 1) usage();
  16.   while (i < argc) {
  17.     if (argv[i][0] == '-') {
  18.         if (argv[i][1] == 'f') {
  19.             i += 1;
  20.         } else if (argv[i][1] == 'c') {
  21.             no_creat = 1;
  22.             i += 1;
  23.         } else {
  24.             usage();
  25.         }
  26.     } else {
  27.         path = argv[i];
  28.         i += 1;
  29.         if (doit(path) > 0) {
  30.             std_err("touch: cannot touch ");
  31.             std_err(path);
  32.             std_err("\n");
  33.         }
  34.     }
  35.   }
  36.   exit(0);
  37. }
  38.  
  39.  
  40. doit(name)
  41. char *name;
  42. {
  43.   int fd;
  44.   long *t, tim;
  45.   struct stat buf;
  46.   unsigned short tmp;
  47.   long tvp[2];
  48.   extern long time();
  49.  
  50.   if (!access(name, 0)) {    /* change date if possible */
  51.     stat(name, &buf);
  52.     tmp = (buf.st_mode & S_IFREG);
  53.     if (tmp != S_IFREG) return(1);
  54.  
  55.     tim = time((long *) 0);
  56.     tvp[0] = tim;
  57.     tvp[1] = tim;
  58.     if (!utime(name, tvp))
  59.         return(0);
  60.     else
  61.         return(1);
  62.  
  63.   } else {
  64.     /* File does not exist */
  65.     if (no_creat == 1)
  66.         return(0);
  67.     else if ((fd = creat(name, 0666)) < 0) {
  68.         return(1);
  69.     } else {
  70.         close(fd);
  71.         return(0);
  72.     }
  73.   }
  74. }
  75.  
  76.  
  77. usage()
  78. {
  79.   std_err("Usage: touch [-c] file...\n");
  80.   exit(1);
  81. }
  82.